#include "mainscene.h"
#include "ui_mainscene.h"
#include <QButtonGroup>
#include <QPainter>
#include <QDebug>
#include "mypushbutton.h"
#include <QTimer>
#include <QSound>

MainScene::MainScene(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainScene)
{
    ui->setupUi(this);

    //配置主场景
    //在主窗口的构造函数中
    //设置固定大小
    this->setFixedSize(QSize(320,588));
    //设置图标
    this->setWindowIcon(QIcon(":/res/Coin0001.png"));
    //设置标题
    this->setWindowTitle("彪少的翻金币游戏");

    //退出功能实现
    connect(ui->actionquit,&QAction::triggered,this,[=](){
        this->close();
    });

    //声音
    QSound * startSound = new QSound(":/res/TapButtonSound.wav",this);


    //开始按钮实现
    //这里运用了函数指针的方式，如果用函数对象的方式，在主场景构造函数调用
    //结束之后，按钮就被销毁了，所以用堆内存的方式，但是堆内存有一个问题
    //就是析构问题，我们通过设置它的父亲，利用这种方式析构
    //一个有意思的是，将按钮的父亲设置好后，就显示出来了
    MyPushButton* startBtn = new MyPushButton(":/res/MenuSceneStartButton.png");
    startBtn->setParent(this);
    startBtn->move( (this->width() - startBtn->width())*0.5, this->height()*0.7 );

    //在主场景类中加入一个选择界面类指针，并在构造函数中申请堆内存
    chooseScene = new CooseLeveScene();

    //连接函数都写在了主函数的构造函数的
    connect(startBtn, &MyPushButton::clicked, [=](){
        qDebug() << "按了开始按钮";
        //startBtn->move( 0, 20 );
        startSound->play();
        startBtn->zoom1();
        startBtn->zoom2();

        //限时操作
        QTimer::singleShot(500,this,[=](){
            //自己隐藏
            this->hide();
            //设置chooseScene场景位置
            chooseScene->setGeometry(this->geometry());
            //选择关卡场景
            chooseScene->show();
        });

        //一般这种链接代码只要做一次就够了，写在构造函数里就行了
        //这里的结构怎么理解呢，首先，主窗类里含有了下个场景，也就是
        //选择关卡场景，通过按键，隐藏主窗口，显示辅助窗口，
        //主窗口会监听辅助窗口的信号
        connect(chooseScene, &CooseLeveScene::chooseSceneBack, this, [=](){
            this->setGeometry(chooseScene->geometry());
            chooseScene->hide();
            this->show();
        });

    });




}

void MainScene::paintEvent(QPaintEvent *)
{
    //这里采用了栈对象
    QPainter pt(this);
    QPixmap pix;
    pix.load(":/res/PlayLevelSceneBg.png");
    pt.drawPixmap(0,0,this->width() ,this->height() ,pix);

    //缩放
    pix.load(":/res/Title.png");
    pix = pix.scaled(pix.width() * 0.5, pix.height() * 0.5);
    pt.drawPixmap(20,20,pix);

}

MainScene::~MainScene()
{
    delete ui;
}














